<?php
/**
 * @author		João Batista Neto
 * @brief		Objetos que representam cada tipo do retorno da API
 * @package		dso.buscape.result.type
 */

require_once 'dso/buscape/result/BuscapeComponent.php';

/**
 * @brief		Tipos BuscaPé
 * @details		Interface para identificação de um tipo de retorno BuscaPé
 * @class		BuscapeType
 * @ingroup		Types
 */
abstract class BuscapeType extends BuscapeComponent {
	/**
	 * @brief	Proteção contra definição de propriedades não definidas ou somente leitura
	 * @param	$name string Nome da propriedade
	 * @param	$value string Valor da propriedade
	 * @throws	RuntimeException
	 */
	public function __set( $name , $value ){
		throw new RuntimeException( sprintf( 'O objeto %s não possui uma propriedade %s ou ela é somente leitura.' , $this->getClass()->getName() , $name ) );
	}

	/**
	 * @brief	Proteção contra recuperação de propriedades não definidas
	 * @param	$name string Nome da propriedade
	 * @throws	RuntimeException
	 */
	public function __get( $name ){
		throw new RuntimeException( sprintf( 'O objeto %s não possui uma propriedade %s.' , $this->getClass()->getName() , $name ) );
	}

	/**
	 * @brief	Proteção contra chamada de métodos não definidos
	 * @param	$name string Nome do método
	 * @param	args array Lista de parâmetros passado ao método
	 * @throws	RuntimeException
	 */
	public function __call( $name , array $args ){
		throw new RuntimeException( sprintf( 'O objeto %s não possui um método %s().' , $this->getClass()->getName() , $name ) );
	}
}